package com.univocity.trader.strategy;

import com.univocity.trader.account.*;
import com.univocity.trader.candles.*;
import com.univocity.trader.indicators.*;

import java.util.*;

/**
 * 一个使用任何指标（通常来自包 {@link com.univocity.trader.indicators}）实现的策略。
 *
 * @see Strategy
 * @see Indicator
 * @see com.univocity.trader.indicators
 */
public abstract class IndicatorStrategy extends IndicatorGroup implements Strategy {

    /**
     * 返回此策略中使用的所有指标，如果有的话。
     *
     * @return 此策略使用的所有指标的集合。可能是 {@code null}。
     */
    protected abstract Set getAllIndicators();

    /**
     * 提交该策略及其所有指标的最新价格更新，以便更新其状态并计算“最终”价格。
     *
     * @param candle  从实时的交易或历史数据中接收到的最新蜡烛（通常由 {@link com.univocity.trader.simulation.SimulatedExchange} 管理）。
     * @param context
     * @return 购买（{@code BUY}）、出售（{@code SELL}）或什么都不做（即 {@code NEUTRAL}）的指示。
     *         任何其他值都将被处理这个 {@link Signal} 的 {@link com.univocity.trader.account.Trader} 忽略。
     */
    public abstract Signal getSignal(Candle candle, Context context);
}
